package gestores;

import java.sql.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Vector;


import javax.swing.tree.DefaultMutableTreeNode;

import persistencia.DAOComanda;
import persistencia.DAOMesa;
import persistencia.DAOMozo;
import persistencia.DAOPedidoDelivery;

import controlador.Controlador;
import negocio.*;

public class GestorPedidos {

	private static GestorPedidos instance;
	public static GestorPedidos getInstance() {
		if(instance == null)
		{
			instance = new GestorPedidos();
		}
		return instance;
	}
	public void crearComanda(Collection<ItemComanda> items, Mesa mesa, int cantidadPersonas)
	{

		Mozo mozo = DAOMozo.getInstancia().obtenerMozoDeMesa(mesa.getNroMesa());
		Comanda comanda = new Comanda(mozo,items,cantidadPersonas);
		comanda.cambiarEstadoAEnEspera();
		mesa.asignarComanda(comanda);

		DAOMesa.getInstancia().asignarComandaAMesa(comanda.getNroComanda(), mesa.getNroMesa());
		DAOComanda.getInstancia().crearComanda(comanda, mesa);

		priorizarComanda(comanda);
	}
	public void crearPedidoDeDelivery(Collection<ItemComanda> items, Mesa mesa, int telefono, String direccion)
	{
		
		java.util.Calendar cal = java.util.Calendar.getInstance();
		java.util.Date utilDate = cal.getTime();
		java.sql.Date hora = new Date(utilDate.getTime());
		PedidoDelivery pedido = new PedidoDelivery(new Comanda(null,items,0), direccion, telefono , hora);
		DAOPedidoDelivery.getInstancia().ingresarPedido(pedido);

	}
	private void priorizarComanda(Comanda comanda)
	{
		
	}
	public Comanda buscarComanda(int NroComanda)
	{
		return null;
		
	}
	public void modificarComanda(int NroComanda, Collection<ItemComanda> items)
	{
		
	}
	public Boolean verificarCliente()
	{
		return true;
		
	}
	public float informarDemoraPedidoSalon(int nroMesa)
	{
		return 0;
		
	}
	public void demorarComanda(int nroComanda, int tiempo)
	{
		Comanda c = DAOComanda.getInstancia().obtenerComanda(nroComanda);
		if(c.getEstado().equals("Pendiente")){
			c.setTiempoDeDemora(c.getTiempoDeDemora() + tiempo);
			DAOComanda.getInstancia().UpdateTiempoDemoraComanda(c);
		}
	}
	public String obtenerPlatosMasVendidos(){
		/*UTILIZADO EN REPORTE DE PLATOS MAS VENDIDOS*/
		return null;
	}
	public Vector<Comanda> obtenerComandasListas(){
		/*UTILIZADO EN REPORTE DE PLATOS MAS VENDIDOS*/
		return null;
	}
	public void cambiaEstadoDeComandaAEnPreparacion(int nroComanda){
		Comanda c = DAOComanda.getInstancia().obtenerComanda(nroComanda);
		c.setEstado("Pendiente");
		DAOComanda.getInstancia().UpdateTiempoDemoraComanda(c);
	}
	public Collection<Mesa> getMesas()
	{
		return DAOMesa.getInstancia().obtenerMesas();
	}
	public DefaultMutableTreeNode getTreeContent(String setting){
		DefaultMutableTreeNode base = new DefaultMutableTreeNode("Comandas");
		if (setting.equals("Espera")){
			Collection<Comanda> comandas = new ArrayList<Comanda>();
			comandas = DAOComanda.getInstancia().obtenerComandas();
			//ARMO EL ARBOL PARA MOSTRAR LAS COMANDAS EN CURSO
			for (Comanda comanda : comandas) {
				if(comanda.getEstado().equals("Espera")){
					String contenido = String.valueOf(comanda.getNroComanda()) + " - " + String.valueOf(comanda.getTiempoDeDemora());
					DefaultMutableTreeNode nodoComanda = new DefaultMutableTreeNode(contenido);
					base.add(nodoComanda);
					for (ItemComanda item : comanda.getItemsComanda()) {
						contenido = item.getPlato().getNombre() + " - " + item.getPlato().getMinutos();
						DefaultMutableTreeNode nodoPlato = new DefaultMutableTreeNode(contenido);
						nodoComanda.add(nodoPlato);
						}
					}
				}
			}else{
				Collection<Comanda> comandas = new ArrayList<Comanda>();
				comandas = DAOComanda.getInstancia().obtenerComandas();
				//ARMO EL ARBOL PARA MOSTRAR LAS COMANDAS EN CURSO
				for (Comanda comanda : comandas) {
					if(comanda.getEstado().equals("Pendiente")){
						String contenido = String.valueOf(comanda.getNroComanda()) + " - " + String.valueOf(comanda.getTiempoDeDemora());
						DefaultMutableTreeNode nodoComanda = new DefaultMutableTreeNode(contenido);
						base.add(nodoComanda);
						for (ItemComanda item : comanda.getItemsComanda()) {
							contenido = item.getPlato().getNombre() + " - " + item.getPlato().getMinutos();
							DefaultMutableTreeNode nodoPlato = new DefaultMutableTreeNode(contenido);
							nodoComanda.add(nodoPlato);
							}
						}
					}
				}
			
		return base;
		}

	
}
